package cn.tedu.csmall.product.service;

import cn.tedu.csmall.commons.pojo.vo.PageData;
import cn.tedu.csmall.product.pojo.param.SpuAddNewParam;
import cn.tedu.csmall.product.pojo.param.SpuUpdateInfoParam;
import cn.tedu.csmall.product.pojo.vo.*;
import org.springframework.transaction.annotation.Transactional;

@Transactional
public interface ISpuService {

    /**
     * spu"是否为新品"的状态文本
     */
    String[] IS_NEW_ARRIVAL_Text = {"非新品", "新品"};

    /**
     * spu“是否推荐”的状态文本
     */
    String[] IS_RECOMMEND_TEXT = {"不推荐", "推荐"};

    /**
     * 新增SPU
     *
     * @param spuAddNewParam SPU数据
     */
    void addNew(SpuAddNewParam spuAddNewParam);

    /**
     * 根据id删除SPU
     *
     * @param id SPU ID
     */
    void delete(Long id);

    /**
     * 设置为新品
     *
     * @param id spu的ID
     */
    void updateIsNewArrival(Long id);

    /**
     * 设置为非新品
     *
     * @param id spu的ID
     */
    void updateNoNewArrival(Long id);

    /**
     * 设置为推荐
     *
     * @param id spu的ID
     */
    void updateIsRecommend(Long id);

    /**
     * 设置为非推荐
     *
     * @param id spu的ID
     */
    void updateNoRecommend(Long id);

    /**
     * 根据id修改SPU详情
     *
     * @param id                 SPU id
     * @param spuUpdateInfoParam 更新的SPU数据
     */
    void update(Long id, SpuUpdateInfoParam spuUpdateInfoParam);

    /**
     * 根据id查询SPU详情
     *
     * @param id SPU ID
     * @return SPU的标准数据
     */
    SpuStandardVO getStandardById(Long id);

    /**
     * 根据id查询SPU完整信息
     *
     * @param id SPU ID
     * @return SPU完整信息
     */
    SpuFullInfoVO getFullInfoById(Long id);

    /**
     * 根据id查询编辑对话框的SPU信息
     *
     * @param id SPU ID
     * @return 编辑对话框的SPU信息
     */
    SpuEditListVO getEditInfo(Long id);

    /**
     * 查询SPU数据列表
     *
     * @param pageNum 页码
     * @return SPU数据列表
     */
    PageData<SpuListItemVO> getList(Integer pageNum);

    /**
     * 查询SPU数据列表
     *
     * @param pageNum  页码
     * @param pageSize 每页记录数
     * @return SPU数据列表
     */
    PageData<SpuListItemVO> getList(Integer pageNum, Integer pageSize);

    /**
     * 根据SPU_ID查询SKU列表
     * @param id         SPU_ID
     * @param pageNum    页码
     * @param pageSize   每页记录数
     * @return           SKU列表
     */
    PageData<SkuListItemVO> getSkuListBySpuList(Long id, Integer pageNum, Integer pageSize);
}
